package com.kuangstudy.thread.syn;

import com.sun.xml.internal.bind.v2.model.annotation.RuntimeAnnotationReader;

/**
 * @author Losca
 * @date 2021/7/19 21:01
 * 不安全的买票
 */
public class UnsafeBuyTicket implements Runnable {

    private int ticketNums = 10;
    boolean flag = true;//外部停止

    @Override
    public void run() {
        while (flag) {
            buyTicket();
        }

    }

    private synchronized void buyTicket() {
        //判断是否有票
        if (ticketNums <= 0) {
            flag = false;
            return;
        }
        //模拟延时 synchronized同步方法 锁的是this
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //买票
        System.out.println(Thread.currentThread().getName() + "拿到" + ticketNums--);
    }

}

class Test {
    public static void main(String[] args)  {
        UnsafeBuyTicket unsafeBuyTicket = new UnsafeBuyTicket();
        new Thread(unsafeBuyTicket, "张三").start();
        new Thread(unsafeBuyTicket, "李四").start();
        new Thread(unsafeBuyTicket, "王五").start();
        /**
         * 张三拿到10
         * 王五拿到9
         * 李四拿到10
         * 王五拿到8
         * 李四拿到7
         * 张三拿到6
         * 王五拿到5
         * 李四拿到4
         * 张三拿到4
         * 张三拿到3
         * 王五拿到3
         * 李四拿到3
         * 张三拿到2
         * 王五拿到1
         * 李四拿到2
         * 线程不安全
         */

    }
}
